import axios from 'axios';

import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import { Message } from 'element-ui';

import { userTempId, readToken } from '@/utils/auth';

//创建实例对象
const instance = axios.create({
  baseURL: '/sph', //默认域名
  timeout: 5000, //超时时间
});

//请求拦截
instance.interceptors.request.use((config) => {
  //向 请求头添加 userTempId  用户的唯一临时标识符
  config.headers.userTempId = userTempId();
  //向 请求头添加 token  用户的唯一真实标识符
  if (readToken()) {
    config.headers.token = readToken();
  }
  //开启进度条
  NProgress.start();
  //返回请求的所有的配置信息
  return config;
});

//响应拦截
instance.interceptors.response.use(
  (response) => {
    //关闭进度条
    NProgress.done();
    //判断状态码。返回对应的数据
    switch (response.data.code) {
      case 200:
        return response.data.data;
      case 201:
        Message.warning(response.data.message);
        return;
      case 208:
        Message.warning('请先登录');
        return Promise.reject();
    }

    return response.data;
  },
  (error) => {
    //统一输出错误信息
    console.log(error.message);

    //关闭进度条
    NProgress.done();

    // 1. 返回一个 失败状态的Promise
    // return Promise.reject(()=>{});
    // throw error.message;

    // 2. 返回一个 pending 状态的 Promise
    return new Promise(() => {});
  }
);

//暴露对象
export default instance;
